# 编写一个程序，查找所有此类数字，它们可以被7整除，但不能是5的倍数（在2000和3200之间（均包括在内））。
# 获得的数字应以逗号分隔的顺序打印在一行上。
# 答案： 2002,2009,2016,2023,2037,2044,2051,2058,2072,2079,2086,2093,2107,2114,2121,2128,2142,2149,2156,2163,2177,
# 2184,2191,2198,2212,2219,2226,2233,2247,2254,2261,2268,2282,2289,2296,2303,2317,2324,2331,2338,2352,2359,2366,
# 2373,2387,2394,2401,2408,2422,2429,2436,2443,2457,2464,2471,2478,2492,2499,2506,2513,2527,2534,2541,2548,2562
# 2569,2576,2583,2597,2604,2611,2618,2632,2639,2646,2653,2667,2674,2681,2688,2702,2709,2716,2723,2737,2744,2751,
# 2758,2772,2779,2786,2793,2807,2814,2821,2828,2842,2849,2856,2863,2877,2884,2891,2898,2912,2919,2926,2933,2947,
# 2954,2961,2968,2982,2989,2996,3003,3017,3024,3031,3038,3052,3059,3066,3073,3087,3094,3101,3108,3122,3129,3136,
# 3143,3157,3164,3171,3178,3192,3199 

# 个人答案
# a = list()
# for BianLi in range(2000,3200) :
#     if (BianLi%7==0) & (BianLi%5!=0) :
#         a.append(BianLi)
# print(a)


# 标准答案
# l=[]
# for i in range(2000, 3201):
#     if (i%7==0) and (i%5!=0):
#         l.append(str(i))
 
# print (','.join(l))


###################################################################################################################################################
# 定义一个至少有两个方法的类 且， :       方法 A:从控制台输入获取字符串       方法 B:打印大写母的字符串。
# 还请包含简单的测试函数来测试类方法。

#答案 
# class A():
#     def A(self):
#         self.x=input()
    
#     def B(self):
#         print(self.x.upper())

# A=A()
# A.A()
# A.B()


####################################################################################################################################
# 问题:编写一个程序，以2位数字，X,Y作为输入，生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。
# 注意:X与Y大于零
# 例子假设程序有以下输入:x=3、y=5
# 则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]]

# # 个人答案
# X=3
# Y=5
# A=[[ xx*yy for yy in range(Y)] for xx in range(X) ] 
# print(A)
# print(A[2][4])#XY


# ########################################################################################################################################
# # 读取A文件计算文件中每行每个单词出现次数，随后以单词+出现次数的方式从大到小逐行写入B中
# APath=r'C:\Users\admin\Desktop\PyTest2\A.txt'
# BPath=r"C:\Users\admin\Desktop\PyTest2\B.txt"
# A = open(APath,encoding = "utf-8")
# A1=A.read().split('\n')

# B = open(BPath,'w',encoding = "utf-8")

# for i in A1:
#     A2 = i.split(",")
#     B1=dict()
#     for ii in A2:
#         if ii not in B1 :
#             B1[ii] = A2.count(ii)#//这里使用了一个函数计算器数量，但用正则表达式应该也行
#     sorted(B1.values(),reverse=False)
#     for key in B1 :
#         B.write(str(key)+":"+str(B1[key])+" ")
#     B.write('\n')
        
# B.close()
# A.close()

###########################################################################################################################################

# #关于修饰器的部分
# def SuoDaYo( TakoLo ):
#     def YiYiYo():
#         return TakoLo
#     return YiYiYo()

# @SuoDaYo
# def A(b):
#     return b

# print(A("解决"))

######################################################################################################################################
#把str_abc = 'asdadas dagvfsdgf; hsahnfids, jniaksnj,joidajs, adsada'
#分割成多个字段：['asdadas', 'dagvfsdgf', 'hsahnfids', 'jniaksnj', 'joidajs', 'adsada']
# str_abc = 'asdadas dagvfsdgf; hsahnfids, jniaksnj,joidajs, adsada'
# print(str_abc.split(","))

########################################################################################################################################
#题目：编写一个递归函数，计算一个正整数 n 的各位数字之和。
#示例：对于输入n = 1234，期望输出为10，因为 1 + 2 + 3 + 4 = 10。
#要求：使用递归实现函数，函数的输入 n 是一个正整数。

#个人答案
# def A(a):
#     i=0
#     if(a>10):
#         i=a%10+A(int(a/10))
#     else:
#         i=a
#     return i 
# print(A(1234))

# 官方答案
# #答案
# def sum_of_digits(n):
#     # 基线条件：如果 n 是个位数，则直接返回 n
#     if n < 10:
#         return n
#     # 递归条件：将 n 的个位数取出来加上剩余数字的各位数字之和
#     else:
#         return n % 10 + sum_of_digits(n // 10)

# number = 1234
# print(f"数字 {number} 的各位数字之和是:", sum_of_digits(number))

######################################################################################################################################

# #与装饰器相关
# def log_decorator(func):
#     def wrapper(*args, **kwargs):
#         print('装饰器开始 call 输出值',args,"    ",kwargs )
#         result = func(*args,kwargs)
#         print('装饰器结束 call')
#         return result
#     return wrapper

# # 示例使用
# @log_decorator
# def example_function():
#     print('无参的方法')

# @log_decorator
# def example_function_with_args(arg1, arg2,ar3,arg4,a5):
#     print(f'有参的方法: {arg1}, {arg2},{ar3},{arg4},{a5}')

# # 调用无参函数装饰后的函数
# # example_function()

# # 调用带参数函数装饰后的函数
# example_function_with_args('值一', '值二',3,4,a=114)

###################################################################################################################################

# class Test ():
#     df="DD"
#     pass

# a=Test()
# print(hasattr(a,"df")) #hasattr()
# setattr(Test,"dfi",666)
# # delattr(Test,"df")
# print(getattr(Test,"df"))

# 以下是魔法方法笔试题
# class Context:
#     def __enter__(self):
#         print("启动！！")
#         return Context()
#     def do_somthing(self):
#         print("做点什么")
#     def __exit__(self,t,v,tb):
#         print("关闭！！")

# with Context() as f:
#     f.do_somthing()
###############################################################################################################

# a = 'without,hello,bag,world,f,ffffffffffff'
# items=[x for x in a.split(',')]
# items.sort()
# print(items,a.upper())

# 问题:编写一个程序，接受一系列空格分隔的单词作为输入，并在删除所有重复的单词并按字母数字排序后打印这些单词。
# 假设向程序提供以下输入:
# hello world and practice makes perfect and hello world again
# 则输出为:
# again and hello makes perfect practice world
# a = "hello world and practice makes perfect and hello world again"
# b=a.split(" ")
# for i in b:
#     c = b.count(i)
#     if c>1:
#         b.remove(i) 

# print(sorted(b,reveset=False))

######################################################################################################################################

# # Python函数在定义的时候，默认参数L的值就被计算出来了，即[]，因为默认参数L也是一个变量，
# # 它指向对象[]，每次调用该函数，如果改变了L的内容，则下次调用时，默认参数的内容就变了，不再是函数定义时的[]了
# # 因此默认参数必须指向不变参数
#     # 那函数要改成这样
#     #   def add_end(L=None):
#     # L = []
#     # L.append('END')
#     # return L
# def add_end(L=[]):
#     L.append('END')
#     return L
# print(add_end([1, 2, 3]))
# print(add_end([1, 2, 3]))
# print(add_end([1, 2, 3]))
# print("-------------------------------------")
# print(add_end())
# print(add_end())
# print(add_end())
##################################################################################################################################

# #可变参数
# def calc(*numbers):
#     sum = 0
#     for n in numbers:
#         sum = sum + n * n
#     return sum
# print(calc(1,2,3))
# print(calc(1,2))

